﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	printf("%d", a);
	return 0;
}
#include<stdio.h>
int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");
	fwrite(&a, 4, 1, pf);//二进制的形式写到文件中
	//fwrite是写入文件，这段代码表示写入一个数据，一个数据占四个字节
	fclose(pf);
	//fclose是关闭文件
	pf = NULL;
	return 0;
}
struct _iobuf
{
	char* _ptr;
	int _cnt;
	char* _base;
	int _flag;
	int _file;
	int _charbuf;
	int _bufsiz;
	char* _tmpfname;
};
typedef struct _iobuf FILE;
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	//这里的路径是相对路径，表示在当前的工程目录下的data.txt
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读取文件

	//关闭文件

	return 0;
}
#include <stdio.h>
int main()
{
	FILE* pf = fopen("test.txt", "r"); //以“r”的形式打开⽂件，如果⽂件不存在，则打开失败
		if (pf == NULL)
		{
			perror("fopen\n");
			return 1;
		}
	printf("打开⽂件成功，可以对⽂件进⾏操作\n");
	//不再使⽤⽂件时，需要关闭⽂件 

	return 0;
}
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data,txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("打开文件成功，可以对文件进行操作\n");

	//读取文件

	//关闭文件
	fclose(pf);
	//这里fclose完之后他是一个野指针，我们需要将pf再次置为空指针
	pf = NULL;
	return 0;
}
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写字符到标准输出流(屏幕上)
	fputc('a', stdout);
	fputc('b', stdout);
	fputc('c', stdout);
	fputc('d', stdout);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	int i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
		fputc(i, pf);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	for (int i = 0; i < 10; i++)
	{
		int ch = fgetc(pf);
		fputc(ch, stdout);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
//}
//我们就写代码，来读取前⾯test.txt⽂件中的前10个字符 
#include <stdio.h>
int main()
{
	FILE* fp = fopen("test.txt", "r");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		int c = fgetc(fp);
		fputc(c, stdout); //使⽤fputc在标准输出流上打印字符 
	}

	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
//假设test.txt⽂件中存放abcdef 
int main()
{
	FILE* fp = fopen("test.txt", "r");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
		{
		int c = fgetc(fp);
		if (c == EOF)
		{
			if (feof(fp))
				printf("遇到文件末尾了\n");
			else if (ferror(fp))
				printf("读取发⽣了错误\n");
		}
		else
		{
			//fflush(stdout);  // 强制刷新标准输出缓冲区
			fputc(c, stdout); //使⽤fputc在标准输出流上打印字符 
		}
	}
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
//以写的形式打开⽂件后，再去读⽂件，就会发⽣错误 
int main()
{
	FILE* fp = fopen("test.txt", "w");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	int c = fgetc(fp);//读⽂件 
	if (c == EOF)
	{
		if (feof(fp))
			printf("遇到⽂件末尾了\n");
		else if (ferror(fp))
		{
			printf("读⽂件发⽣了错误\n");
		}
	}
	else
	{
		fputc(c, stdout); //使⽤fputc在标准输出流上打印字符 
		
	}
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
int main()
{
	FILE* fp = fopen("test.txt", "w");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	int i = 0;
	fputs("abc\0def", fp);
	fputs("hehe", fp);
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
int main()
{
	FILE* fp = fopen("test.txt", "r");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	char arr1[] = "*************";
	fgets(arr1, sizeof(arr1), fp);

	char arr2[] = "*************";
	fgets(arr2, sizeof(arr1), fp);
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
struct Stu
{
	char name[30];
	int age;
	float score;
};
int main()
{
	struct Stu b = { "zhangsan", 20, 85.5f };
	FILE* fp = fopen("test.txt", "w");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	fprintf(fp, "%s %d %.1f", b.name, b.age, b.score);
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include<stdio.h>
struct Stu
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct Stu s = { "zhangsan",20,95.5 };

	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("%s %d %lf", s.name, s.age, s.score);
	fprintf(pf, "%s %d %lf", s.name, s.age, s.score);
	fclose("pf");
	pf = NULL;
	return 0;
}
#include <stdio.h>
struct Stu
{
	char name[30];
	int age;
	float score;
};
int main()
{
	struct Stu b = { "zhangsan", 20, 85.5f };
	FILE* fp = fopen("test.txt", "w");
	if (fp == NULL)
	{
		perror("fopen\n");
		return 1;
	}
	fprintf(fp, "%s %d %.1f", b.name, b.age, b.score);
	//不再使⽤⽂件时，需要关闭⽂件 
	fclose(fp);
	fp = NULL; //将指针置为NULL,避免成为野指针。 
	return 0;
}
#include <stdio.h>
int main()
{
	int data[] = { 1, 2, 3, 4, 5 };
	// 打开⽂件 
	FILE* fp = fopen("data.bin", "wb");
	// 检查⽂件是否成功打开 
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	// 将数据写⼊⽂件 
	if (fwrite(data, sizeof(int), 5, fp) != 5)
	{
		perror("fwrite");
		return -1;

	}
	// 关闭⽂件 
	fclose(fp);
	fp = NULL;
	return 0;
}
#include <stdio.h>
int main()
{
	int data[5] = { 0 }; // 假设⽂件中包含 5 个整数数据 
	// 打开⽂件 
	FILE* fp = fopen("data.bin", "rb");
	// 检查⽂件是否成功打开 
	if (fp == NULL) {
		perror("fopen");
		return -1;
	}
	// 从⽂件中读取整数数据块 
	size_t num_read = fread(data, sizeof(int), 5, fp);
	// 检查读取是否成功 
	if (num_read != 5)
	{
		if (feof(fp))
			printf("Reached end of file\n");
		else if (ferror(fp))
			printf("Error reading file\n");
	}
	else
	{
		// 输出读取的数据 
		for (int i = 0; i < 5; i++) {
			printf("Data[%d]: %d\n", i, data[i]);
		}
	}
	// 关闭⽂件 
	fclose(fp);
	return 0;
}
#include <stdio.h>
struct Stu
{
	char name[30];
	int age;
	float score;
};
int main()
{
	struct Stu s = { "zhangsan", 100, 85.5f };
	//将s中的结构数据转换成⼀个字符串 
	char arr[100] = { 0 };
	sprintf(arr, "%s %d %.1f", s.name, s.age, s.score);
	printf("%s\n", arr);
	return 0;
}
#include <stdio.h>
struct Stu
{
	char name[30];
	int age;
	float score;
};
int main()
{
	char str[] = "zhangsan 100 85.5";
	struct Stu s = { 0 };
	//从str中的字符串内中解析出格式化的数据，存放在结构体中 
	sscanf(str, "%s %d %f", s.name, &(s.age), &(s.score));
	//打印结构体s中的数据 
	printf("%s %d %.1f\n", s.name, s.age, s.score);
	return 0;
}
/* fseek example */
#include <stdio.h>
int main()
{
	FILE* pFile;
	pFile = fopen("example.txt", "wb");
	fputs("This is an apple.", pFile);
	fseek(pFile, 9, SEEK_SET);
	fputs(" sam", pFile);
	fclose(pFile);
	return 0;
}
/* ftell example : getting size of a file */
#include <stdio.h>
int main()
{
	FILE* pFile;
	long size;
	pFile = fopen("myfile.txt", "rb");
	if (pFile == NULL)
		perror("Error opening file");
	else
	{
		fseek(pFile, 0, SEEK_END); // non-portable
		size = ftell(pFile);
		fclose(pFile);
		printf("Size of myfile.txt: %ld bytes.\n", size);
	}
	return 0;
}
/* rewind example */
#include <stdio.h>
int main()
{
	int n;
	FILE* pFile;
	char buffer[27];

	pFile = fopen("myfile.txt", "w+");
	for (n = 'A'; n <= 'Z'; n++)
		fputc(n, pFile);
	rewind(pFile);

	fread(buffer, 1, 26, pFile);
	fclose(pFile);
    buffer[26] = '\0';
	printf(buffer);
	return 0;
}
#include <stdio.h>
#include <windows.h>
//VS2022 WIN11环境测试 
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区 
	printf("睡眠10秒-已经写数据了，打开test.txt⽂件，发现⽂件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘） 
	//注：fflush 在⾼版本的VS上不能使⽤了 
	printf("再睡眠10秒-此时，再次打开test.txt⽂件，⽂件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区 
	pf = NULL;
	return 0;
}
#include <stdio.h>
int main()
{
	FILE* fp = fopen("test.txt", "w+");
	if (fp == NULL)
	{
		perror("fopen for w+");
		return 1;
	}
	//写abcdefghi到⽂件中 
	fputs("abcdefghi", fp);
	//刷新缓冲区，保证数据写⼊⽂件 
	fflush(fp);
	//要读取数据b字符，先定位⽂件指针 
	fseek(fp, 1, SEEK_SET);
	int ch = fgetc(fp);//读取字符 
	printf("%c\n", ch);
	//在b的位置开始写⼊hello 
	fseek(fp, -1, SEEK_CUR);
	//解释：因为前⾯读取⼀个字符后,⽂件指⽰器现在指向了c,需要从当前位置退回⼀个字符 

	fputs("hello", fp);
	//关闭⽂件 
	fclose(fp);
	fp = NULL;
	return 0;
}
